<!DOCTYPE html>
<html lang="en-us">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <title>Unity WebGL Player | {{{ PRODUCT_NAME }}}</title>
    <style>
        *{border:0;margin:0;padding:0}
    </style>
</head>
<body>
<div id="unity-container" class="unity-desktop">
    <canvas id="unity-canvas" width=960 height=600 style="width:960px;height:600px;"></canvas>
    <div id="unity-loading-bar">
        <div id="unity-logo"></div>
        <div id="unity-progress-bar-empty">
            <div id="unity-progress-bar-full"></div>
        </div>
    </div>
    <div id="unity-mobile-warning" style="display:none;">
        WebGL builds are not supported on mobile devices.
    </div>
    <div id="unity-footer" style="display:none;">
        <div id="unity-webgl-logo"></div>
        <div id="unity-fullscreen-button"></div>
        <div id="unity-build-title">2021</div>
    </div>
</div>
<script>
    var buildUrl = "Build";
    var loaderUrl = buildUrl + "/{{{ LOADER_FILENAME }}}";
    var config = {
        dataUrl: buildUrl + "/{{{ DATA_FILENAME }}}",
        frameworkUrl: buildUrl + "/{{{ FRAMEWORK_FILENAME }}}",
        codeUrl: buildUrl + "/{{{ CODE_FILENAME }}}",
        symbolsUrl: buildUrl + "/{{{ SYMBOLS_FILENAME }}}",
        streamingAssetsUrl: "StreamingAssets",
        companyName: "{{{ COMPANY_NAME }}}",
        productName: "{{{ PRODUCT_NAME }}}",
        productVersion: "{{{ PRODUCT_VERSION }}}",
    };


</script>
<script>
    document.addEventListener('DOMContentLoaded',function(){



        var container = document.querySelector("#unity-container");
        var canvas = document.querySelector("#unity-canvas");
        var loadingBar = document.querySelector("#unity-loading-bar");
        var progressBarFull = document.querySelector("#unity-progress-bar-full");
        var fullscreenButton = document.querySelector("#unity-fullscreen-button");
        var mobileWarning = document.querySelector("#unity-mobile-warning");

        window.canvas = canvas;
        // By default Unity keeps WebGL canvas render target size matched with
        // the DOM size of the canvas element (scaled by window.devicePixelRatio)
        // Set this to false if you want to decouple this synchronization from
        // happening inside the engine, and you would instead like to size up
        // the canvas DOM size and WebGL render target sizes yourself.
        // config.matchWebGLToCanvasSize = false;


        loadingBar.style.display = "block";

        var script = document.createElement("script");
        script.src = loaderUrl;
        script.onload = () => {
            createUnityInstance(canvas, config, (progress) => {
                progressBarFull.style.width = 100 * progress + "%";
            }).then((unityInstance) => {
                loadingBar.style.display = "none";
                fullscreenButton.onclick = () => {
                    unityInstance.SetFullscreen(1);
                };
                gameInstance = unityInstance;
            }).catch((message) => {
                alert(message);
            });
        };
        document.body.appendChild(script);
        canvas.style.width = window.innerWidth+"px";
        canvas.style.height = window.innerHeight+"px";
    });
</script>
<script>
    var storage = {};
    function getStorageValue(key, defaultValue){
        var v = storage[key];
        if(v === null){
            return defaultValue;
        }
        if(typeof v!== 'undefined'){
            return v;
        }
        return defaultValue;
    }
    var WXWASMSDK = {
        WXInitializeSDK(){
            gameInstance.SendMessage("WXSDKManagerHandler",'Inited', 200);
        },
        VibrateShort: function (s, f, c) {},
        VibrateLong: function (s, f, c) {},
        WXStorageSetIntSync: function (key, value) {
            storage[key] = value;
        },
        WXStorageGetIntSync: function (key, defaultValue) {
            return getStorageValue(key, defaultValue);
        },
        WXStorageSetFloatSync: function (key, value) {
            storage[key] = value;
        },
        WXStorageGetFloatSync: function (key, defaultValue) {
            return getStorageValue(key, defaultValue);
        },
        WXStorageSetStringSync: function (key, value) {
            storage[key] = value;
        },
        WXStorageGetStringSync: function (key, defaultValue) {
            return getStorageValue(key, defaultValue || '');
        },
        WXStorageDeleteAllSync: function () {
            storage = {};
        },
        WXStorageDeleteKeySync: function (key) {
            delete storage[key];
        },
        WXStorageHasKeySync: function (key) {
            return typeof storage[key] === 'undefined';
        },
        WXLogin: function (s, f, c) {},
        WXCheckSession: function (s, f, c) {},
        WXAuthorize: function (scope, s, f, c) {},
        WXGetUserInfo: function (withCredentials, lang, s, f, c) {},
        WXGetSystemLanguage: function(){},
        WXGetSystemInfo: function(s,f,c){},
        WXGetSystemInfoSync: function(){
            return "";
        },
        WXGetAccountInfoSync: function(){
            return '{"miniProgramRaw": "{}", "pluginRaw": "{}"}';
        },
        WXCreateUserInfoButton: function(x, y, width, height, lang, withCredentials){},
        WXUserInfoButtonShow: function(id){},
        WXUserInfoButtonDestroy: function(id){},
        WXUserInfoButtonHide: function(id){},
        WXUserInfoButtonOffTap: function(id){},
        WXUserInfoButtonOnTap: function(id){},
        WXUpdateShareMenu: function ( conf, s, f, c) {},
        WXShowShareMenu: function ( conf, s, f, c) {},
        WXHideShareMenu: function ( conf, s, f, c) {},
        WXShareAppMessage: function ( conf ) {},
        WXSetMessageToFriendQuery: function (num ) {},
        WXOnShareAppMessage: function (conf,isPromise) {},
        WXOnShareAppMessageResolve: function ( conf ) {},
        WXOnShareTimeline: function ( conf, needCallback ) {},
        WXOnAddToFavorites: function ( conf, needCallback ) {},
        WXOffShareTimeline: function ( ) {},
        WXOffShareAppMessage: function ( ) {},
        WXOffAddToFavorites: function ( ) {},
        WXGetShareInfo: function (conf, s, f, c) {},
        WXAuthPrivateMessage: function (conf, s, f, c) {},
        WXCreateBannerAd: function (conf) {
            return Math.random().toString(32);
        },
        WXCreateRewardedVideoAd: function (conf) {
            return Math.random().toString(32);
        },
        WXCreateInterstitialAd: function (conf) {
            return Math.random().toString(32);
        },
        WXCreateGridAd: function (conf) {},
        WXCreateCustomAd: function (conf) {},
        WXADStyleChange: function (id,key,value) {},
        WXShowAd: function (id) {},
        WXHideAd: function (id) {},
        WXADGetStyleValue: function (id,key) {},
        WXADDestroy: function (id) {},
        WXADLoad: function (id,succ,fail) {},
        WXGetLaunchOptionsSync: function () {},
        WXToTempFilePathSync: function (conf) {},
        WXGetUserDataPath: function () {},
        WXWriteFileSync: function (filePath, data, encoding) {},
        WXCreateFixedBottomMiddleBannerAd: function (adUnitId, adIntervals, height) {
            return Math.random().toString(32);
        },
        WXReportGameStart:function(){},
        WXReportGameSceneError: function(sceneId, errorType, errStr, extJsonStr) {},
        WXWriteLog: function(str) {},
        WXWriteWarn: function(str) {},
        WXHideLoadingPage: function() {},
        WXPreloadConcurrent: function() {},
        WXSetUserCloudStorage:function(){},
        WXCreateInnerAudioContext:function(){
            return Math.random().toString(32);
        },
        WXInnerAudioContextSetBool:function(){},
        WXInnerAudioContextSetString:function(){},
        WXInnerAudioContextSetFloat:function(){},
        WXInnerAudioContextGetFloat:function(){},
        WXInnerAudioContextGetBool:function(){},
        WXInnerAudioContextPlay:function(){},
        WXInnerAudioContextPause:function(){},
        WXInnerAudioContextStop:function(){},
        WXInnerAudioContextDestroy:function(){},
        WXInnerAudioContextSeek:function(){},
        WXInnerAudioContextAddListener:function(id,key){
            if(key==="onCanplay"){
                setTimeout(function(){
                    gameInstance.SendMessage("WXSDKManagerHandler",'OnAudioCallback',JSON.stringify({
                        callbackId:id,
                        errMsg:key
                    }));
                },100)
            }
        },
        WXInnerAudioContextRemoveListener:function(){},
        WXPreDownloadAudios:function(paths,id){
            gameInstance.SendMessage("WXSDKManagerHandler",'WXPreDownloadAudiosCallback',JSON.stringify({
                callbackId:id.toString(),
                errMsg:"0"
            }));
        },
        WXCreateVideo:function(){
            return Math.random().toString(32);
        },
        WXVideoPlay:function(){},
        WXVideoAddListener:function(){},
        WXVideoDestroy:function(){},
        WXVideoExitFullScreen:function(){},
        WXVideoPause:function(){},
        WXVideoRequestFullScreen:function (){},
        WXVideoSeek:function(){},
        WXVideoStop:function(){},
        WXVideoRemoveListener:function(){},
        WXShowOpenData:function(){},
        WXDownloadTexture(id,type,callback){
            var Infos = {
                "Texture":GameGlobal.TextureConfig,
                "SpriteAtlas":GameGlobal.SpriteAtlasConfig,
            }[type];
            if(!Infos[id]){
                return console.error(type + "映射id 不存在",id);
            }
            var path = Infos[id].p;
            var cid = type+"_"+id;
            if(downloadedTextures[cid]){
                if(downloadedTextures[cid].data){
                    callback();
                }else{
                    console.error(type + "映射id data 不存在！",id);
                }
            }else if(downloadingTextures[cid]){
                downloadingTextures[cid].push(callback);
            }else{
                downloadingTextures[cid] = [callback];
                textureHandler.downloadFile(id,type,GameGlobal.AUDIO_PREFIX.replace(/\/$/,'')+'/'+path.replace(/\\/g,'/'));
            }
        },
        WXShowKeyboard(){},
        WXUpdateKeyboard(){},
        WXHideKeyboard(){},
        WXGetNetworkType(){},
        WXCreateGameClubButton() {
            return Math.random().toString(32);
        },
        WXGameClubButtonDestroy() {},
        WXGameClubButtonHide() {},
        WXGameClubButtonShow() {},
        WXGameClubButtonAddListener() {},
        WXGameClubButtonRemoveListener() {},
        WXNavigateToMiniProgram() {},
        WXGameClubButtonSetProperty() {},
        WXGameClubStyleChangeInt() {},
        WXGameClubStyleChangeStr() {},
        WXExitMiniProgram() {},
        WXSetKeepScreenOn(){},
        WXIsCloudTest(){ return false;},
        WXUncaughtException(){},
        WXSetDataCDN() {},
        WXSetPreloadList() {},
        WXReportScene() {},
        WXGetCachePath() {},
        WXGetPluginCachePath() {},
            WX_AddCard(conf, callbackId){
    },
    WX_AuthPrivateMessage(conf, callbackId){
    },
    WX_Authorize(conf, callbackId){
    },
    WX_CheckIsUserAdvisedToRest(conf, callbackId){
    },
    WX_CheckSession(conf, callbackId){
    },
    WX_ChooseImage(conf, callbackId){
    },
    WX_ChooseMedia(conf, callbackId){
    },
    WX_ChooseMessageFile(conf, callbackId){
    },
    WX_CloseBLEConnection(conf, callbackId){
    },
    WX_CloseBluetoothAdapter(conf, callbackId){
    },
    WX_CloseSocket(conf, callbackId){
    },
    WX_CreateBLEConnection(conf, callbackId){
    },
    WX_CreateBLEPeripheralServer(conf, callbackId){
    },
    WX_ExitMiniProgram(conf, callbackId){
    },
    WX_ExitVoIPChat(conf, callbackId){
    },
    WX_FaceDetect(conf, callbackId){
    },
    WX_GetAvailableAudioSources(conf, callbackId){
    },
    WX_GetBLEDeviceCharacteristics(conf, callbackId){
    },
    WX_GetBLEDeviceRSSI(conf, callbackId){
    },
    WX_GetBLEDeviceServices(conf, callbackId){
    },
    WX_GetBLEMTU(conf, callbackId){
    },
    WX_GetBatteryInfo(conf, callbackId){
    },
    WX_GetBeacons(conf, callbackId){
    },
    WX_GetBluetoothAdapterState(conf, callbackId){
    },
    WX_GetBluetoothDevices(conf, callbackId){
    },
    WX_GetChannelsLiveInfo(conf, callbackId){
    },
    WX_GetChannelsLiveNoticeInfo(conf, callbackId){
    },
    WX_GetClipboardData(conf, callbackId){
    },
    WX_GetConnectedBluetoothDevices(conf, callbackId){
    },
    WX_GetExtConfig(conf, callbackId){
    },
    WX_GetFileInfo(conf, callbackId){
    },
    WX_GetGroupEnterInfo(conf, callbackId){
    },
    WX_GetLocalIPAddress(conf, callbackId){
    },
    WX_GetLocation(conf, callbackId){
    },
    WX_GetNetworkType(conf, callbackId){
    },
    WX_GetScreenBrightness(conf, callbackId){
    },
    WX_GetSetting(conf, callbackId){
    },
    WX_GetShareInfo(conf, callbackId){
    },
    WX_GetStorageInfo(conf, callbackId){
    },
    WX_GetSystemInfo(conf, callbackId){
    },
    WX_GetSystemInfoAsync(conf, callbackId){
    },
    WX_GetUserInfo(conf, callbackId){
    },
    WX_GetUserInteractiveStorage(conf, callbackId){
    },
    WX_GetWeRunData(conf, callbackId){
    },
    WX_HideKeyboard(conf, callbackId){
    },
    WX_HideLoading(conf, callbackId){
    },
    WX_HideShareMenu(conf, callbackId){
    },
    WX_HideToast(conf, callbackId){
    },
    WX_InitFaceDetect(conf, callbackId){
    },
    WX_IsBluetoothDevicePaired(conf, callbackId){
    },
    WX_JoinVoIPChat(conf, callbackId){
    },
    WX_Login(conf, callbackId){
    },
    WX_MakeBluetoothPair(conf, callbackId){
    },
    WX_NavigateToMiniProgram(conf, callbackId){
    },
    WX_NotifyBLECharacteristicValueChange(conf, callbackId){
    },
    WX_OpenBluetoothAdapter(conf, callbackId){
    },
    WX_OpenCard(conf, callbackId){
    },
    WX_OpenChannelsActivity(conf, callbackId){
    },
    WX_OpenChannelsEvent(conf, callbackId){
    },
    WX_OpenChannelsLive(conf, callbackId){
    },
    WX_OpenChannelsUserProfile(conf, callbackId){
    },
    WX_OpenCustomerServiceConversation(conf, callbackId){
    },
    WX_OpenSetting(conf, callbackId){
    },
    WX_PreviewImage(conf, callbackId){
    },
    WX_PreviewMedia(conf, callbackId){
    },
    WX_ReadBLECharacteristicValue(conf, callbackId){
    },
    WX_RemoveStorage(conf, callbackId){
    },
    WX_RemoveUserCloudStorage(conf, callbackId){
    },
    WX_RequestMidasFriendPayment(conf, callbackId){
    },
    WX_RequestMidasPayment(conf, callbackId){
    },
    WX_RequestSubscribeMessage(conf, callbackId){
    },
    WX_RequestSubscribeSystemMessage(conf, callbackId){
    },
    WX_SaveFileToDisk(conf, callbackId){
    },
    WX_SaveImageToPhotosAlbum(conf, callbackId){
    },
    WX_ScanCode(conf, callbackId){
    },
    WX_SendSocketMessage(conf, callbackId){
    },
    WX_SetBLEMTU(conf, callbackId){
    },
    WX_SetClipboardData(conf, callbackId){
    },
    WX_SetEnableDebug(conf, callbackId){
    },
    WX_SetInnerAudioOption(conf, callbackId){
    },
    WX_SetKeepScreenOn(conf, callbackId){
    },
    WX_SetMenuStyle(conf, callbackId){
    },
    WX_SetScreenBrightness(conf, callbackId){
    },
    WX_SetStatusBarStyle(conf, callbackId){
    },
    WX_SetUserCloudStorage(conf, callbackId){
    },
    WX_ShowActionSheet(conf, callbackId){
    },
    WX_ShowKeyboard(conf, callbackId){
    },
    WX_ShowLoading(conf, callbackId){
    },
    WX_ShowModal(conf, callbackId){
    },
    WX_ShowShareImageMenu(conf, callbackId){
    },
    WX_ShowShareMenu(conf, callbackId){
    },
    WX_ShowToast(conf, callbackId){
    },
    WX_StartAccelerometer(conf, callbackId){
    },
    WX_StartBeaconDiscovery(conf, callbackId){
    },
    WX_StartBluetoothDevicesDiscovery(conf, callbackId){
    },
    WX_StartCompass(conf, callbackId){
    },
    WX_StartDeviceMotionListening(conf, callbackId){
    },
    WX_StartGyroscope(conf, callbackId){
    },
    WX_StopAccelerometer(conf, callbackId){
    },
    WX_StopBeaconDiscovery(conf, callbackId){
    },
    WX_StopBluetoothDevicesDiscovery(conf, callbackId){
    },
    WX_StopCompass(conf, callbackId){
    },
    WX_StopDeviceMotionListening(conf, callbackId){
    },
    WX_StopFaceDetect(conf, callbackId){
    },
    WX_StopGyroscope(conf, callbackId){
    },
    WX_UpdateKeyboard(conf, callbackId){
    },
    WX_UpdateShareMenu(conf, callbackId){
    },
    WX_UpdateVoIPChatMuteConfig(conf, callbackId){
    },
    WX_UpdateWeChatApp(conf, callbackId){
    },
    WX_VibrateLong(conf, callbackId){
    },
    WX_VibrateShort(conf, callbackId){
    },
    WX_WriteBLECharacteristicValue(conf, callbackId){
    },
    WX_StartGameLive(conf, callbackId){
    },
    WX_CheckGameLiveEnabled(conf, callbackId){
    },
    WX_GetUserCurrentGameliveInfo(conf, callbackId){
    },
    WX_GetUserRecentGameLiveInfo(conf, callbackId){
    },
    WX_GetUserGameLiveDetails(conf, callbackId){
    },
    WX_OpenChannelsLiveCollection(conf, callbackId){
    },
    WX_OpenPage(conf, callbackId){
    },
    WX_GetGameClubData(conf, callbackId){
    },

    WX_RemoveStorageSync(){
    },
    WX_ReportEvent(){
    },
    WX_ReportMonitor(){
    },
    WX_ReportPerformance(){
    },
    WX_ReportUserBehaviorBranchAnalytics(){
    },
    WX_ReserveChannelsLive(){
    },
    WX_RestartMiniProgram(){
    },
    WX_RevokeBufferURL(){
    },
    WX_SetPreferredFramesPerSecond(){
    },
    WX_SetStorageSync(){
    },
    WX_ShareAppMessage(){
    },
    WX_TriggerGC(){
    },
    WX_StopDownloadTexture(){
    },
    WX_StarDownloadTexture(){
    },

    WX_OnAccelerometerChange(){
    },
    WX_OffAccelerometerChange(){
    },
    WX_OnAudioInterruptionBegin(){
    },
    WX_OffAudioInterruptionBegin(){
    },
    WX_OnAudioInterruptionEnd(){
    },
    WX_OffAudioInterruptionEnd(){
    },
    WX_OnBLECharacteristicValueChange(){
    },
    WX_OffBLECharacteristicValueChange(){
    },
    WX_OnBLEConnectionStateChange(){
    },
    WX_OffBLEConnectionStateChange(){
    },
    WX_OnBLEMTUChange(){
    },
    WX_OffBLEMTUChange(){
    },
    WX_OnBLEPeripheralConnectionStateChanged(){
    },
    WX_OffBLEPeripheralConnectionStateChanged(){
    },
    WX_OnBeaconServiceChange(){
    },
    WX_OffBeaconServiceChange(){
    },
    WX_OnBeaconUpdate(){
    },
    WX_OffBeaconUpdate(){
    },
    WX_OnBluetoothAdapterStateChange(){
    },
    WX_OffBluetoothAdapterStateChange(){
    },
    WX_OnBluetoothDeviceFound(){
    },
    WX_OffBluetoothDeviceFound(){
    },
    WX_OnCompassChange(){
    },
    WX_OffCompassChange(){
    },
    WX_OnDeviceMotionChange(){
    },
    WX_OffDeviceMotionChange(){
    },
    WX_OnDeviceOrientationChange(){
    },
    WX_OffDeviceOrientationChange(){
    },
    WX_OnError(){
    },
    WX_OffError(){
    },
    WX_OnGyroscopeChange(){
    },
    WX_OffGyroscopeChange(){
    },
    WX_OnHide(){
    },
    WX_OffHide(){
    },
    WX_OnInteractiveStorageModified(){
    },
    WX_OffInteractiveStorageModified(){
    },
    WX_OnKeyDown(){
    },
    WX_OffKeyDown(){
    },
    WX_OnKeyUp(){
    },
    WX_OffKeyUp(){
    },
    WX_OnKeyboardComplete(){
    },
    WX_OffKeyboardComplete(){
    },
    WX_OnKeyboardConfirm(){
    },
    WX_OffKeyboardConfirm(){
    },
    WX_OnKeyboardHeightChange(){
    },
    WX_OffKeyboardHeightChange(){
    },
    WX_OnKeyboardInput(){
    },
    WX_OffKeyboardInput(){
    },
    WX_OnMemoryWarning(){
    },
    WX_OffMemoryWarning(){
    },
    WX_OnMessage(){
    },
    WX_OffMessage(){
    },
    WX_OnNetworkStatusChange(){
    },
    WX_OffNetworkStatusChange(){
    },
    WX_OnNetworkWeakChange(){
    },
    WX_OffNetworkWeakChange(){
    },
    WX_OnShareMessageToFriend(){
    },
    WX_OffShareMessageToFriend(){
    },
    WX_OnShow(){
    },
    WX_OffShow(){
    },
    WX_OnSocketClose(){
    },
    WX_OffSocketClose(){
    },
    WX_OnSocketError(){
    },
    WX_OffSocketError(){
    },
    WX_OnSocketMessage(){
    },
    WX_OffSocketMessage(){
    },
    WX_OnSocketOpen(){
    },
    WX_OffSocketOpen(){
    },
    WX_OnTouchCancel(){
    },
    WX_OffTouchCancel(){
    },
    WX_OnTouchEnd(){
    },
    WX_OffTouchEnd(){
    },
    WX_OnTouchMove(){
    },
    WX_OffTouchMove(){
    },
    WX_OnTouchStart(){
    },
    WX_OffTouchStart(){
    },
    WX_OnUnhandledRejection(){
    },
    WX_OffUnhandledRejection(){
    },
    WX_OnUserCaptureScreen(){
    },
    WX_OffUserCaptureScreen(){
    },
    WX_OnVoIPChatInterrupted(){
    },
    WX_OffVoIPChatInterrupted(){
    },
    WX_OnVoIPChatMembersChanged(){
    },
    WX_OffVoIPChatMembersChanged(){
    },
    WX_OnVoIPChatSpeakersChanged(){
    },
    WX_OffVoIPChatSpeakersChanged(){
    },
    WX_OnVoIPChatStateChanged(){
    },
    WX_OffVoIPChatStateChanged(){
    },
    WX_OnWindowResize(){
    },
    WX_OffWindowResize(){
    },

    WX_OnAddToFavorites(){
    },
    WX_OnAddToFavorites_Resolve(conf){
    },
    WX_OffAddToFavorites(){
    },
    WX_OnCopyUrl(){
    },
    WX_OnCopyUrl_Resolve(conf){
    },
    WX_OffCopyUrl(){
    },
    WX_OnHandoff(){
    },
    WX_OnHandoff_Resolve(conf){
    },
    WX_OffHandoff(){
    },
    WX_OnShareTimeline(){
    },
    WX_OnShareTimeline_Resolve(conf){
    },
    WX_OffShareTimeline(){
    },
    WX_OnGameLiveStateChange(){
    },
    WX_OnGameLiveStateChange_Resolve(conf){
    },
    WX_OffGameLiveStateChange(){
    },

    WX_SetHandoffQuery(query){
        return "";
    },
    WX_GetAccountInfoSync(){
        return JSON.stringify({});
    },
    WX_GetBatteryInfoSync(){
        return JSON.stringify({});
    },
    WX_GetEnterOptionsSync(){
        return JSON.stringify({});
    },
    WX_GetExptInfoSync(keys){
        return JSON.stringify({});
    },
    WX_GetExtConfigSync(){
        return JSON.stringify({});
    },
    WX_GetLaunchOptionsSync(){
        return JSON.stringify({});
    },
    WX_GetMenuButtonBoundingClientRect(){
        return JSON.stringify({});
    },
    WX_GetStorageInfoSync(){
        return JSON.stringify({});
    },
    WX_GetSystemInfoSync(){
        return JSON.stringify({});
    },
    WX_SetCursor(path,x,y){
        return "";
    },
    WX_SetMessageToFriendQuery(option){
        return "";
    },
    WX_GetTextLineHeight(option){
        return "";
    },
    WX_LoadFont(path){
        return "";
    },
    WX_GetGameLiveState(){
        return JSON.stringify({});
    },

    };
    var downloadedTextures = {};
    var downloadingTextures = {};
    var textureHandler = {
        downloadFile(textureId,type,prefix){
            var url = prefix+'.png';
            var cid = type+"_"+textureId;
            var image = new Image();
            image.src = url;
            image.onload = function () {
                downloadedTextures[cid] = {
                    data:image
                };
                if(downloadingTextures[cid] instanceof Array){
                    downloadingTextures[cid].forEach(v=>v());
                }else{
                    downloadingTextures[cid]();
                }
                delete downloadingTextures[cid];
            };
            image.onerror = function(){
                console.error(url+" 下载失败！");
            }
        }
    };

    var GameGlobal = {
        TextureConfig:{},
        SpriteAtlasConfig:{},
        DownloadedTextures: downloadedTextures,
        AUDIO_PREFIX:"./Assets/Textures/"
    };
    window._ScaleRate = 1;
</script>
<script src="./texture-config.js"></script>
</body>
</html>
